package com.xinzhitong.www.controller;

import com.xinzhitong.www.exception.systemmessage.EmptySystemMessageException;
import com.xinzhitong.www.service.MessageService;
import com.xinzhitong.www.utils.Message;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 消息控制器
 *
 * @author 徐鑫
 */
@CrossOrigin
@RestController
@RequestMapping("message")
public class MessageController {

    @Resource
    MessageService messageService;

    /**
     * 分页获取系统消息
     *
     * @param pageNo   页码
     * @param pageSize 页大小
     * @return 系统消息列表
     */
    @RequestMapping(value = "systemMessages", method = RequestMethod.GET)
    public Message systemMessages(
            @RequestParam("pageNo") Integer pageNo,
            @RequestParam("pageSize") Integer pageSize
    ) {
        String msg;
        try {
            return Message.createSuc(messageService.getSystemMessage(pageNo, pageSize));
        } catch (EmptySystemMessageException e) {
            e.printStackTrace();
            msg = "暂无更多的系统消息";
        }
        return Message.createErr(msg);
    }

    /**
     * 分页筛选系统消息
     *
     * @param pageNo   页码
     * @param pageSize 页大小
     * @param keyWord  关键字
     * @return 系统消息列表
     */
    @RequestMapping(value = "systemMessagesSearch", method = RequestMethod.GET)
    public Message systemMessagesSearch(
            @RequestParam("pageNo") Integer pageNo,
            @RequestParam(value = "pageSize", required = false, defaultValue = "5") Integer pageSize,
            @RequestParam("keyWord") String keyWord
    ) {
        String msg;
        try {
            return Message.createSuc(messageService.searchSystemMessage(pageNo, pageSize, keyWord));
        } catch (EmptySystemMessageException e) {
            e.printStackTrace();
            msg = "暂无更多的系统消息";
        }
        return Message.createErr(msg);
    }

    /**
     * 批量删除消息
     *
     * @param messageIds 消息id列表
     * @return 响应信息
     */
    @RequestMapping(value = "systemMessageRemove", method = RequestMethod.DELETE)
    public Message systemMessageRemove(@RequestBody Integer[] messageIds) {
        String msg = "删除消息成功";
        messageService.removeMessages(messageIds);
        return Message.createSuc(msg);
    }

    /**
     * 忽略一个系统消息
     *
     * @param messageId 指定系统消息id
     * @return 响应信息
     */
    @RequestMapping(value = "systemMessageIgnore", method = RequestMethod.POST)
    public Message systemMessageIgnore(@RequestParam("messageId") Integer messageId) {
        String msg = "忽略成功";
        try {
            messageService.ignoreMessage(messageId);
            return Message.createSuc(msg);
        } catch (EmptySystemMessageException e) {
            e.printStackTrace();
            msg = "消息已失效";
        }
        return Message.createErr(msg);
    }

    /**
     * 获取最新的几条系统消息
     *
     * @return 系统消息列表
     */
    @RequestMapping(value = "newestSystemMessage", method = RequestMethod.GET)
    public Message newestSystemMessage(
            @RequestParam(value = "size", required = false, defaultValue = "1") Integer size
    ) {
        String msg;
        try {
            return Message.createSuc(messageService.getNewestSystemMessage(size));
        } catch (EmptySystemMessageException e) {
            e.printStackTrace();
            msg = "暂无更多系统消息";
        }
        return Message.createErr(msg);
    }

    /**
     * 获取新消息数
     *
     * @return 新消息数
     */
    @RequestMapping(value = "numberOfSystemMessages", method = RequestMethod.GET)
    public Message numberOfSystemMessages() {
        return Message.createSuc(messageService.getNumberOfSystemMessages());
    }

}
